/*! \file
 * \brief Enter a brief description here.
 *
 * Enter a detailed description here. (optional)
 * \author Author (Ivo Wingelaar)
 * \date Date (2011)
 * \version Version (0.0.1)
 * \copyright Copyright (GNU LGPL v3)
 */

#ifndef __LYNX_CURSOR_MANAGER_HPP_INCLUDED__
#define __LYNX_CURSOR_MANAGER_HPP_INCLUDED__

#include "LynxConfig.hpp"

namespace Lynx
{

/** class         **/
/** CursorManager **/
//! An interface that provides access to cursor-related functions.
class CursorManager : public virtual Myth::ReferenceCounter
{
public:
    /** virtual function **/
    /** set_visible      **/
    //! Sets if the cursor should be visible.
    /// \return void
    /// \param    bool visible
    ///         True if you want the cursor to be visible, false otherwise.
    virtual void set_visible(bool visible) = 0;

    /** const virtual function **/
    /** is_visible             **/
    //! Returns if the cursor is visible.
    /// \return bool
    ///         True if the cursor is visible, false otherwise.
    /// \param  void
    virtual bool is_visible(void) const = 0;

    /** virtual function **/
    /** set_position     **/
    //! Sets the position of the cursor.
    /// \return void
    /// \param    const Core::Vector2f& pos
    ///         The relative position of the cursor on the screen.
    virtual void set_position(const Myth::Math::Vector2f& pos) = 0;

    /** virtual function **/
    /** set_position     **/
    //! Sets the position of the cursor.
    /// \return void
    /// \param    float x
    ///         The relative x-coord of the cursor.
    /// \param    float y
    ///         The relative y-coord of the cursor.
    virtual void set_position(float x,
                              float y) = 0;

    /** virtual function **/
    /** set_position     **/
    //! Sets the position of the cursor.
    /// \return void
    /// \param    const Core::Vector2i& pos
    ///         The absolute position of the cursor on the screen.
    virtual void set_position(const Myth::Math::Vector2i& pos) = 0;

    /** virtual function **/
    /** set_position     **/
    //! Sets the position of the cursor.
    /// \return void
    /// \param    int32_t x
    ///         The absolute x-coord of the cursor.
    /// \param    int32_t y
    ///         The absolute y-coord of the cursor.
    virtual void set_position(int32_t x,
                              int32_t y) = 0;

    /** const virtual function **/
    /** get_position           **/
    //! Returns the absolute position of the cursor.
    /// \return Core::Vector2i
    ///         The absolute position of the cursor.
    /// \param  void
    virtual Myth::Math::Vector2i get_position(void) = 0;

    /** const virtual function **/
    /** get_relative_position  **/
    //! Returns the relative position of the cursor.
    /// \return Core::Vector2f
    ///         The relative position of the cursor.
    /// \param  void
    virtual Myth::Math::Vector2f get_relative_position(void) = 0;

    /** virtual function   **/
    /** set_reference_rect **/
    //! Sets a new reference rectangle for the cursor positions.
    /// \return void
    /// \param    Core::Rectanglei* rect
    ///         A pointer to the new reference rectangle for the relative and absolute positions.
    virtual void set_reference_rect(Myth::Math::Rectanglei* rect = 0) = 0;
};

} // namespace Lynx

#endif // __LYNX_CURSOR_MANAGER_HPP_INCLUDED__

